iT邦幫忙

2025 iThome 鐵人賽

DAY 24
0
Software Development

通勤看手機就可讀懂的 Elixir 語言入門教學系列 第 24

Meta-programming 4 - 自動設置函數

  • 分享至 

  • xImage
  •  

當我們把共同的邏輯抽出成套件時,有時後會需要規定使用的模組有定義特定的函式作為 callback,
除了之前介紹過得 behaviour 來規定之外,我們也可以使用巨集來幫使用套件的模組自動建立函式。

use

當有一個模組 use 我們的套件模組 MyMacro 時,Elixir 會執行 MyMacro.__using__/1
通常這個時候我們會在 MyMacro 模組裡面定義一個叫做 __using__/1 的巨集來接這個呼叫。
(__using__, 的為一個變數為, use 的第二個 keyword list 變數)

首先是我們的 MyMacro 模組

defmodule MyMacro do
  defmacro __using__(opts) do
    function_name = opts[:name]
    quote do
      def unquote(function_name)() do
        "FUWWA"
      end
    end
  end
end

接著在 Demo 模組裡面使用 use 並帶入變數

defmodule Demo do
  use MyMacro, name: :sunsun
end

因為我們的 __using__ 巨集裡面的 quote
定義了根據傳入的名稱定義了新的函數

所以在 Demo 模組 use MyMacro, name: :sunsun 之後
我們就可以使用

Demo.sunsun

#=> "FUWWA"

上一篇
Meta-programming 3 - 定義巨集
系列文
通勤看手機就可讀懂的 Elixir 語言入門教學24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言